#include <stdio.h>    
#include <stdlib.h>    
#include <string.h>    
#include "../Include/log_pub.h"  
  
#define COURSE_FILE "Data/course.txt"    
  
/*typedef struct {    
    char code[10]; // 课程代码    
    char name[50]; // 课程名称    
    int credits;   // 学分    
} Course;  */  

typedef struct
{
    // 课程编号
    char course_id[10];
    // 课程名称
    char course_name[10];
    // 课程性质
    char course_quality[10];
    // 授课学时
    int course_time;
    // 学分
    int fraction;
    // 课程已选人数
    int course_cnt;
    // 课程人数上限
    int course_max_cnt;
} Course;
   
  
void add_course() {    
    Course course;    
    printf("输入课程代码: ");    
    scanf("%s", course.course_id);    
    printf("输入课程名称: ");    
    scanf(" %[^\n]", course.course_name); // 读取包含空格的字符串    
    printf("输入课程性质: ");    
    scanf("%s", course.course_quality);    
    printf("输入授课学时: ");    
    scanf("%d", &course.course_time);   
    printf("输入课程学分: ");    
    scanf("%d", &course.fraction);   
    printf("输入课程已选人数: ");    
    scanf("%d", &course.course_cnt);   
    printf("输入课程最大人数: ");    
    scanf("%d", &course.course_max_cnt);   
  
    FILE *file = fopen(COURSE_FILE, "a");    
    if (file) {    
        fwrite(&course, sizeof(Course), 1, file);    
        fclose(file);    
        log_message("添加课程");    
        printf("课程添加成功!\n");    
    } else {    
        printf("打开课程文件出错!\n");    
    }    
}    
  
void delete_course() {    
    char code[10];    
    printf("输入要删除的课程代码: ");    
    scanf("%s", code);    
  
    Course course;    
    FILE *file = fopen(COURSE_FILE, "r");    
    FILE *temp_file = fopen("Data/temp_courses.txt", "w");    
    int found = 0;    
  
    if (file && temp_file) {    
        while (fread(&course, sizeof(Course), 1, file)) {    
            if (strcmp(course.course_id, code) == 0) {    
                found = 1; // 找到课程    
            } else {    
                fwrite(&course, sizeof(Course), 1, temp_file); // 写入临时文件    
            }    
        }    
        fclose(file);    
        fclose(temp_file);    
        remove(COURSE_FILE);    
        rename("Data/temp_courses.txt", COURSE_FILE);    
        if (found) {    
            log_message("删除课程");    
            printf("课程删除成功!\n");    
        } else {    
            printf("未找到课程!\n");    
        }    
    } else {    
        printf("打开课程文件或临时文件出错!\n");    
    }    
}    
  
void view_course() {    
    Course course;    
    FILE *file = fopen(COURSE_FILE, "r");    
    if (file) {    
        while (fread(&course, sizeof(Course), 1, file)) {    
            printf("代码: %s, 名称: %s, 课程性质: %s, 授课学时:%d, 课程学分:%d, 已选人数:%d, 最大人数:%d\n", course.course_id, course.course_name, course.course_quality, course.course_time, course.fraction, course.course_cnt, course.course_max_cnt);    
        }    
        fclose(file);    
    } else {    
        printf("打开课程文件出错!\n");    
    }    
}    
  
void revise_course() {    
    char code[10];    
    printf("输入要修改的课程代码: ");    
    scanf("%s", code);    
  
    Course course;    
    FILE *file = fopen(COURSE_FILE, "r");    
    FILE *temp_file = fopen("Data/temp_courses.txt", "w");    
    int found = 0;    
  
    if (file && temp_file) {    
        while (fread(&course, sizeof(Course), 1, file)) {    
            if (strcmp(course.course_id, code) == 0) {    
                printf("输入新课程名称: ");    
                scanf(" %[^\n]", course.course_name); // 读取包含空格的字符串    
                printf("输入课程性质: ");    
                scanf("%s", course.course_quality);    
                printf("输入授课学时: ");    
                scanf("%d", &course.course_time);   
                printf("输入课程学分: ");    
                scanf("%d", &course.fraction);   
                printf("输入课程已选人数: ");    
                scanf("%d", &course.course_cnt);   
                printf("输入课程最大人数: ");    
                scanf("%d", &course.course_max_cnt);    
                found = 1; // 找到课程    
            }    
            fwrite(&course, sizeof(Course), 1, temp_file); // 写入临时文件    
        }    
        fclose(file);    
        fclose(temp_file);    
        remove(COURSE_FILE);    
        rename("Data/temp_courses.txt", COURSE_FILE);    
        if (found) {    
            log_message("修改课程");    
            printf("课程修改成功!\n");    
        } else {    
            printf("未找到课程!\n");    
        }    
    } else {    
        printf("打开课程文件或临时文件出错!\n");    
    }    
}